#ifndef ELIFE_ROBOT_SDK_H
#define ELIFE_ROBOT_SDK_H
#include "localTcpClient.h"
#include "elite_robot_sdk_protocol.h"

class EliteRobotSdk
{
public:
    EliteRobotSdk();
    bool init();
    bool isConnected();
    bool disconnect();

    int getServoStatus(bool& reslut);
    int set_servo_status(ELITE_SDK_SWTICH servo_enable,bool& reslut);
    int setCollisionEnable(ELITE_SDK_SWTICH switch_enable,bool& reslut);        //碰撞使能
    int stop(bool& reslut);                                                     //停止机器人运动
    int setSpeed(double speed_value, bool& reslut);                             //设置机器人速度
    int runJbi(std::string filename, bool& reslut);                             //运行 jbi 文件
    int getSysVarI(int addr, int &value);                                       //获取系统 I 变量值
    int setSysVarI(int addr, int value, bool& reslut);                          //设置系统 I 变量值
    int getSysVarD(int addr, double &value);                                    //获取系统 D 变量值
    int setSysVarD(int addr, double value,bool& reslut);                        //设置系统 D 变量值
    int getSysVarB(int addr, int &value);                                       //获取系统 B 变量值
    int setSysVarB(int addr, int value,bool& reslut);                           //设置系统 B 变量值
    int getSysVarV(int addr, Param6D &value);                                   //获取系统 V 变量值
    int setSysVarV(int addr, Param6D value,bool& reslut);                       //设置系统 V 变量值
    int setSysVarP(int addr, Param6D value,bool& reslut);                       //设置系统 P 变量值

    int syncMotorStatus(bool& reslut);                                          //同步电机状态
    int getMotorStatus(bool& reslut);                                           //获取电机同步状态
    int clearAlarm(bool& reslut);                                               //清除警告
    int get_joint_pos(Param6D &reslut);                                         //获取机器人角关节信息
    int get_tcp_pose(Param6D &reslut);                                          //获取机器人当前位姿信息

    int mov_joint_pos(EliteMoveByjoint move_by_joint,bool& reslut);             //设置机器人关节运动
    int mov_tcp_pose(EliteInverseKinematic inverse_kinematic, bool& reslut);              //设置机器人运动到指定TCP点（逆解+关节运动）

private:
    int mPort=8055;
    std::string mIP="192.168.0.101";

    localTcpClientSync sync_client;
    EliteRobotSdkProtocol protocol;

    int deal_bool_reply(bool &reslut);
    int deal_int_reply(int &reslut);
    int deal_double_reply(double &reslut);
    int deal_6d_reply(Param6D &reslut);
};

#endif // ELITE_ROBOT_SDK_H
